# 能不能把一个函数作为参数传递给另一个函数呢？

def myfunc():
    print("正在调用myfunc...")


def report(func):
    # func : 是一个函数的引用
    # 如果要调用该函数，那么在函数引用后加上()即可
    print("主人，我要开始调用函数了...")
    func()
    print("主人，我调用完函数了，快夸夸我^o^")


report(func=myfunc)
# 主人，我要开始调用函数了...
# 正在调用myfunc...
# 主人，我调用完函数了，快夸夸我^o^

# 利用上面的方法，我们实现一个时间管理大师的函数


import time


def time_master(func):
    print("开始运行程序...")
    start = time.time()
    func()
    stop = time.time()
    print("结束运行程序...")
    print(F"一共号废了{(stop - start):.2f}秒。")


def sleep_func():
    time.sleep(2)
    print("Hello,我睡醒了。")


time_master(sleep_func)  # 一共号废了2.01秒。


# 难道每次我们想知道一个函数的运行时间都要去调用 time_master 函数来实现吗？这是最优解吗？
# 有没有一种方法在调用其他函数的时候能自觉的去执行 time_master 函数呢？
# 答案就是装饰器
